In [140]:
import pandas as pd
Vi bruker her oversikten over lusetellinger fra fiskehelse.no/ Mattilsynet igjen
In [141]:
df = pd.read_excel('data/fiskehelse_2017-10-27-lakselus_per_fisk.xlsx')
In [142]:
df.shape
Out[142]:
Det første tallet er rader, det andre er kolonner. Vi har altså over 61.757 rader. Og det stemmer med rader i Excel-filen. Så langt alt fint!
In [143]:
df.head(n=3)
Out[143]:
In [144]:
df.tail(n=3)
Out[144]:
In [145]:
df.dtypes
Out[145]:
Forklaring: int64
betyr heltall, object
betyr som regel at det er tekst, float64
betyr et tall med desimaler.
In [146]:
df = df.drop(['Lat', 'Lon'], axis='columns')
Forklaring: Her lager vi en ny DataFrame med samme navnet, der vi dropper kolonnene Lat og Lon.
axis=columns
betyr at det er kolonner vi skal droppe, ikke rader.
In [147]:
df = df.rename(columns={'Voksne hunnlus': 'hunnlus', 'Sjøtemperatur': 'sjotemp'})
In [148]:
df.head(n=5)
Out[148]:
Allerede her ser vi gjengangeren NaN
som betyr Not a Number
. Altså at denne cellen ikke har en numerisk verdi (slik som de andre i kolonnen)
La oss se hvor mange rader som mangler verdi (isnull
) i hunnlus-feltet
In [149]:
df['hunnlus'].isnull().sum()
Out[149]:
Oi, nokså mange uten verdi. Trolig har ikke de rapportert lusetall den uka. Vi skal se på det senere.
In [150]:
df2 = pd.read_excel('data/bord4_20171028_kommunedummy.xlsx')
df2
Out[150]:
Her ser vi et typisk mønster der kun første raden i hvert fylke har verdi i fylkekolonnen. For å kunne behandle disse dataene i Pandas må alle ha verdi. Så la oss fylle celler med tomme verdier (fillna
) nedover, en såkalt Forward Fill eller ffill
In [151]:
df2['Fylke'] = df2['Fylke'].fillna(method='ffill')
df2
Out[151]:
Er det mennesker som har punchet dataene du har? Da er det garantert ord som er skrevet NESTEN likt og som roter til data-analysen din.
Vi bruker her et datasett fra UiBs medborgerpanel hvor velgernes holdninger til andre partier er angitt. Datasettet er satt sammen av flere Excel-filer, laget på ulikt tidspunkt.
La oss se på dataene
In [152]:
df = pd.read_csv('data/uib_medborgerpanelet_20170601_partiomparti.csv')
df.head()
Out[152]:
Det er ofte lurt å se hva slags unike verdier som finnes i en kolonne. Det kan du gjøre slik.
In [153]:
df['omtaler_parti'].value_counts().to_frame().sort_index()
Out[153]:
Her var det mye forskjellig! Legg merke til at partiene er skrevet på forskjellige måter. Det betyr trøbbel om vi skal gruppere senere.
Vi må normalisere disse verdiene, dvs samle oss om en måte å skrive på partiene på. En måte å gjøre det på er å lage en fra-til liste med verdier.
In [154]:
partimapping = {
'FRP': 'Frp',
'FrP': 'Frp',
'AP': 'Ap',
'Høyre': 'H',
'SP': 'Sp',
'Venstre': 'V',
'KRF': 'KrF'
}
Så må vi fortelle Pandas at vi vil bytte ut innholdet i de tre kolonnene som inneholder partinavn med den riktige formen av partinavn.
In [155]:
df = df.replace({
'parti_valgt_2013': partimapping,
'omtaler_parti': partimapping}
)
Så tar vi igjen en sjekk på hvilke unike verdier vi har
In [156]:
df['omtaler_parti'].value_counts().to_frame().sort_index()
Out[156]:
Se der ja! Mye bedre. Kun en måte å skrive hvert parti på. Nå kan vi gå i gang med gruppering, pivotering og andre fancy ting